/**
        * @param node HTML DOM节点, 注意不是string
        * @param arr json数组 注意是数组类型
        * @return string 返回HTML字符串, 注意不是DOM节点
        */
        function repeatNode(node, arr) {

        	let out = [];
	        for (let i=0; i<arr.length; i++) {
	            let tmp = node.outerHTML;
	            console.log(tmp);
	            tmp = tmp.replace(/\s/g, ' '); //去掉回车换行, 减少空白符

	            let map = arr[i];
	            console.log(map);

	            //先渲染内层的数组
	            for (let j in map) {
	            	if (map[j] instanceof Array) { //数组, 递归替换
	            		let subNode = node.querySelector('.'+j);
	            		let subHtml = repeatNode(subNode, map[j]); //递归
	            		let subTpl = subNode.outerHTML.replace(/\s/g, ' ');
	            		tmp = tmp.replace(subTpl, subHtml);

	            	}
	            }

	            //再渲染内层的对象
	            for (let j in map) {

	            	if (map[j] instanceof Object && !(map[j] instanceof Array)) { //对象, 递归替换
	            		
	            		let subNode = node.querySelector('.'+j);
	            		let subHtml = repeatNode(subNode, [map[j]]); //递归
	            		let subTpl = subNode.outerHTML.replace(/\s/g, ' ')
	            		tmp = tmp.replace(subTpl, subHtml);

	            	}
	            }

	            //最后渲染外层的键值对/字符串
	            for (let j in map) {
	            	if (typeof map[j] === 'string') { //字符串, 直接替换
	            		let re = new RegExp('{' + j + '}', 'g');
	                	tmp = tmp.replace(re, map[j]);

	            	}
	            }

	            out.push(tmp);
	        }

	        return out.join('');
        }